<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      /* 
            高阶函数
                - 如果一个函数的参数或返回值是函数,则这个函数就称为高阶函数
                - 为什么要将函数作为参数传递(回调函数有什么作用?)
                    - 将函数作为参数,意味着可以对另一个函数动态的传递代码
      */
      class Person {
        constructor(name, age) {
          this.name = name;
          this.age = age;
        }
      }
      const ArrPerson = [new Person('GG', 18), new Person('GG', 38), new Person('GG', 8)];
      function filter(arr, cb) {
        const newArr = [];

        for (let i = 0; i < arr.length; i++) {
          if (cb(arr[i])) {
            newArr.push(arr[i]);
          }
        }
        return newArr;
      }
      const fn = (a) => {
        return a.name === 'GG';
      };
      /* 调用后,因为fn(arr[i])给a赋值,所以=arr[i].name
        返回true 或者 false
        调用函数 fn 吧 */
      //   const result = filter(ArrPerson,fn);
      result = filter(ArrPerson, a => a.name === 'DD');
      console.log(result);
    </script>
  </head>
  <body></body>
</html>
